﻿''' <summary>
''' Liste des champs en sortie d'une table
''' </summary>
''' <remarks></remarks>
Public Class ListeChampsSortieTableDefaut
    Inherits baseListeChampsSortieTable

    ''' <summary>
    ''' Initialisation de la liste de champs en sortie de la table. La liste de champs en sortie doit intercepter
    ''' un certain nombre d'évènements survenus sur la table et y réagir (notamment lors d'une modification des
    ''' champs présents en entrée de la table (lorsque le fichier physique rattaché à la table change de nom par exemple)
    ''' </summary>
    ''' <remarks></remarks>
    Public Overrides Function initialise(ByVal sender As Object) As Boolean
        'Ajouter l'écoute des évènements
        AddHandler CType(sender, tableBDD).ListeChampsEntreeChanged, AddressOf onTraitement_ListeChampsEntreeChanged
        Return True
    End Function

    Protected Overridable Sub onTraitement_ListeChampsEntreeChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim traitementTableBDD As tableBDD = DirectCast(sender, tableBDD)
        If traitementTableBDD.ListeChampsEntree.Count <> 0 And Not _initHasBeenMade Then
            For Each correspEntree As Correspondance In traitementTableBDD.ListeChampsEntree.Values
                Dim correspSortie As New Correspondance(traitementTableBDD, _
                                                        correspEntree.chBDD.Nom, _
                                                        correspEntree.chBDD, _
                                                        typeChEntreeMapping.TABLE)
                Add(correspEntree.chBDD.Nom, correspSortie)
            Next
            If ContainsKey("trAge") Then setDescription("trAge", "Tranche d'âge")
            If ContainsKey("minTrAge") Then setDescription("minTrAge", "Age minimum de la tranche")
            If ContainsKey("maxTrAge") Then setDescription("maxTrAge", "Age maximum de la tranche")
            _initHasBeenMade = True

        ElseIf _initHasBeenMade Then

            'Une fois la nouvelle liste de champs en entrée créée, on regarde si la liste de champs en sortie
            'ne contient pas un lien vers une correspondance dont le champ en entrée ne serait plus présent dans la nouvelle
            'liste de champs en entrée. Si c'est le cas, on remet à nothing la formule du champs en sortie
            For Each corresp As Correspondance In Values
                If corresp.typeChEntree = typeChEntreeMapping.TABLE Then
                    Dim aSupprimer = True
                    If traitementTableBDD.ListeChampsEntree.ContainsKey(corresp.chBDD.Nom) Then
                        If traitementTableBDD.ListeChampsEntree(corresp.chBDD.Nom).chBDD.Format.estEgal(corresp.chBDD.Format) Then
                            aSupprimer = False
                        End If
                    End If
                    If aSupprimer Then
                        corresp.setChEntree(Nothing)
                    End If
                End If
            Next

        End If
    End Sub

End Class
